package net.alche.al.util;

import net.alche.al.util.alches.ToolCrypto;
import net.alche.al.util.alches.ToolJson;
import net.alche.al.util.alches.ToolString;
import net.alche.al.util.alches.ToolDate;
import net.alche.al.util.alches.ToolSerializer;
import net.alche.al.util.alches.ToolSystem;
import net.alche.al.util.alches.ToolRegex;
import net.alche.al.util.alches.ToolFile;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Date;

//
// 工具类 
// @author 姚礼武 
// @datetime 2018/12/18 14:55 
// @version 1.0
//
@SuppressWarnings("all")
public class AC {
  // Json相关操作方法 */
  public static ToolJson json = new ToolJson();
  // // mybatis 相关方法 */
  // public static ToolMybatis mybatis = new ToolMybatis();
  // String 相关工具方法 */
  public static ToolString str = new ToolString();
  // 日期相关的工具方法 */
  public static ToolDate date = new ToolDate();
  // 正则 */
  public static ToolRegex reg = new ToolRegex();

  // 加密相关的通用方法 */
  public static ToolCrypto crypto = new ToolCrypto();
  // 序列化 */
  public static ToolSerializer serializer = new ToolSerializer();
  // 系统信息 */
  public static ToolSystem system = new ToolSystem();
  // 文件 */
  public static ToolFile file = new ToolFile();

  public static String plus(String str, String str2) {
    return (str == null ? "" : str) + str2;
  }

  //
  // 字符串不为空
  //
  // @param str 字符串
  // @return
  //
  public static boolean isNotEmpty(String str) {
    if (str != null && !str.trim().equals("")) {
      return true;
    }
    return false;
  }

  //
  // 字符串不为空
  //
  // @param str 字符串
  // @return
  //
  public static boolean notEmpty(String str) {
    if (str != null && !str.trim().equals("")) {
      return true;
    }
    return false;
  }

  //
  // 字符串为空
  //
  // @param str 字符串
  // @return
  //
  public static boolean empty(String str) {
    if (str != null && !str.trim().equals("")) {
      return false;
    }
    return true;
  }

  public static boolean isEmpty(String str) {
    if (str != null && !str.trim().equals("")) {
      return false;
    }
    return true;
  }

  public static boolean isEmpty(List list) {
    if (list != null && !list.isEmpty()) {
      return false;
    }
    return true;
  }

  public static boolean empty(List list) {
    if (list != null && !list.isEmpty()) {
      return false;
    }
    return true;
  }

  //
  // new一个HashMap 复制(key = value)
  //
  public static Map<String, Object> newMap(String key, Object value) {
    Map<String, Object> map = new HashMap<>();
    map.put(key, value);
    return map;
  }

  //
  // new一个HashMap 复制(key = value)
  //
  public static Map<String, Object> newMap(String[] keys, Object[] values) {
    Map<String, Object> map = new HashMap<>();
    int i = 0;
    for (String key : keys) {
      map.put(key, values[i]);
      i++;
    }
    return map;
  }

  //
  // 将object转为String,当obj为null时，返回""
  //
  public static String toString(Object obj) {
    if (obj != null) {
      if (obj instanceof Date) {
        return AC.date.fmtDatetime((Date) obj);
      } else {
        return String.valueOf(obj);
      }
    }
    return "";
  }

  public static String toStr(Object obj) {
    return toString(obj);
  }

  // 获取第一个元素
  public static Object getMapFirst(Map map) {
    if (map == null || map.isEmpty()) {
      return null;
    }
    for (Object item : map.values()) {
      return item;
    }
    return null;
    // Object obj = map.values().stream().findFirst();
    // return obj;
  }

  //
  // System.out.println 打印日志 txt 输入
  //
  public static void log(Object... txt) {
    String log = null;
    for (Object ob : txt) {
      log = (log == null ? "" : log + " , ") + (ob == null ? "null" : (ob instanceof String ? ob : ob.toString()));
    }
    System.out.println(date.fmt(new Date(), date.FMT_TIME) + " [log] " + log);
  }
}